package com.luxsoft.siipap.em.replica.dao;

import java.text.NumberFormat;
import java.util.List;

import com.luxsoft.siipap.em.replica.ReplicationUtils;
import com.luxsoft.siipap.em.service.EMServiceLocator;
import com.luxsoft.siipap.model.Periodo;

/**
 * Acceso a informacion relacionada con Ventas en SIIPAP DBF 
 * 
 * @author Ruben Cancino
 *
 */
public class SiipapVentasDao {
	
	
	
	/**
	 * Busca el numero de registros determinados por el 
	 * 
	 * @param p
	 * @return
	 */
	public int buscarRegistrosVentas(final Periodo periodo){
		
		List<Periodo> meses=Periodo.periodosMensuales(periodo);
		int res=0;
		for(Periodo p:meses){
			//MOCOMO
			int mesReg=0;
			String sql=ReplicationUtils.resolveSQLCount(p, "MOCOMO", "MCMFECHA");
			sql+=" AND MCmIDENOPE=1";
			int res1=EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForInt(sql);
			mesReg+=res1;
			System.out.println(sql);
			//MOCOCA
			sql=ReplicationUtils.resolveSQLCount(p, "MOCOCA","MCAFECHA");
			sql+=" AND MCaIDENOPE=1";
			int res2=EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForInt(sql);
			mesReg+=res2;
			
			
			//MOVCRE
			sql=ReplicationUtils.resolveSQLCount(p, "MOVCRE", "MCRFECHA");
			sql+=" AND MCRIDENOPE=1";
			int res3=EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForInt(sql);
			mesReg+=res3;
			
			System.out.println("Mes: "+p+" \t Registros: "+mesReg);
			
			res+=mesReg;
		}		
		return res;
	}
	
	/**
	 * Busca el importe de las ventas en el periodo
	 * 
	 * @param periodo
	 * @return
	 */
	public double buscarImporteDeVentas(final Periodo periodo){
		List<Periodo> meses=Periodo.periodosMensuales(periodo);
		double res=0;
		for(Periodo p:meses){
			
			double mes=0;
			Number mres=new Double(0);
			
			//MOCOMO
			String sql=ReplicationUtils.resolveSum(p,"MCMIMPARTI", "MOCOMO", "MCMFECHA");
			sql+=" AND MCmIDENOPE=1";
			mres=(Number)EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForObject(sql,Number.class);
			if(mres!=null)
				mes+=mres.doubleValue();
			
			//MOCOCA
			sql=ReplicationUtils.resolveSum(p, "MCAIMPARTI", "MOCOCA","MCAFECHA");
			sql+=" AND MCaIDENOPE=1";
			mres=(Number)EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForObject(sql,Number.class);
			if(mres!=null)
				mes+=mres.doubleValue();
			
			//MOVCRE
			sql=ReplicationUtils.resolveSum(p, "MCRIMPARTI","MOVCRE", "MCRFECHA");
			sql+=" AND MCRIDENOPE=1";
			mres=(Number)EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForObject(sql,Number.class);
			if(mres!=null)
				mes+=mres.doubleValue();
			
			System.out.println("Mes: "+p+" \t Importe: "+mes);
			
			res+=mes;
		}		
		return res;
	}
	
	/**
	 * Busca el numero de registros determinados por el 
	 * 
	 * @param p
	 * @return
	 */
	public int buscarRegistrosVentasDet(final Periodo periodo){
		List<Periodo> meses=Periodo.periodosMensuales(periodo);
		
		int res=0;
		for(Periodo p:meses){
			
			int mesReg=0;
			String sql=ReplicationUtils.resolveSQLCount(p, "ALMACE", "ALMFECHA");
			sql=sql+" AND ALMTIPO=\'FAC\'";
			mesReg+=EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForInt(sql);			
			System.out.println("Mes: "+p+" \t Registros VentasDet: "+mesReg);
			
			res+=mesReg;
		}		
		return res;
	}
	
	public double buscarCantidadEnVentasDet(final Periodo periodo){
		List<Periodo> meses=Periodo.periodosMensuales(periodo);
		double res=0;
		for(Periodo p:meses){
			
			double mes=0;
			Number mres=new Double(0);
			
			String sql=ReplicationUtils.resolveSum(p,"ALMCANTI", "ALMACE", "ALMFECHA");
			sql=sql+" AND ALMTIPO=\'FAC\'";
			mres=(Number)EMServiceLocator.instance().getSiipapDBFOdbcTemplate().queryForObject(sql,Number.class);
			if(mres!=null)
				mes+=mres.doubleValue();
			
			System.out.println("Mes: "+p+" \t Importe VentasDet: "+mes);
			
			res+=mes;
		}		
		return res;
	}
	
	public static void main(String[] args) {
		SiipapVentasDao dao=new SiipapVentasDao();
		Periodo p=new Periodo("01/10/2008","01/10/2008");
		int registros=dao.buscarRegistrosVentas(p);
		System.out.println("Total Registros Ventas: "+registros);
		double importe=dao.buscarImporteDeVentas(p);		
		System.out.println("Total Importe Ventas: "+NumberFormat.getCurrencyInstance().format(importe));
		
		registros=dao.buscarRegistrosVentasDet(p);
		System.out.println("Total Registros VentasDet: "+registros);
		importe=dao.buscarCantidadEnVentasDet(p);
		System.out.println("Total Cantidad VentasDet: "+NumberFormat.getNumberInstance().format(importe));
	}

}
